package com.my.mycommoncore.utils;

import org.springframework.util.AntPathMatcher;
import java.util.List;
import java.util.Optional;

public class StringUtil {


    /**
     * 判断指定字符串是否与指定匹配规则链表中的任意一个匹配规则匹配
     * @param str 指定字符串
     * @param patternList 匹配规则链表
     * @return 是否匹配
     */
    public static boolean matches(String str, List<String> patternList){

        if(str.isBlank()|| Optional.ofNullable(patternList)
                .map(List::isEmpty)
                .orElse(true)){
            return false;
        }
        for(String pattern : patternList){
            if(isMatch(str,pattern)){
                return true;
            }
        }
        return false;

    }

    /**
     * 判断url是否与规则匹配
     *  匹配规则：
     * 精确匹配
     * 匹配规则中包含 ? 表示任意单个字符;
     * 匹配规则中包含 * 表示一层路径内的任意字符串，不可跨层级;
     * 匹配规则中包含 ** 表示任意层路径的任意字符，可跨层级
     * @param pattern 匹配规则
     * @param str  要匹配的url
     * @return  匹配结果
     */
    public static boolean isMatch(String pattern,String str){
        if (pattern.isBlank()|| str.isBlank()) {
            return false;
        }
        //AntPathMatcher 是 Spring 框架中用于路径匹配的工具类，
        // 它基于 Apache Ant 风格的路径表达式 来实现灵活的路径匹配逻辑，
        // 在 Web 开发（如 Spring MVC 处理请求映射、资源访问控制等场景）中非常常用。
        AntPathMatcher matcher = new AntPathMatcher();
        return matcher.match(pattern, str);
    }
}
